<?php namespace Common\Model;
use Hdphp\Model\Model;
/*
 * 分类管理模型
 * */
class Categroy extends  Model{
	//操作数据表
	protected $table ="category";
	//自动验证，必须通过create方法来触发
	protected $validate = array(
	 //1.name名称;2.验证规则;3.提示信息;4.验证条件;5.验证时间
	 array("cname","required","分类名称不能为空",3,3),
	 array("cname","maxlen:10","分类名称不能超过10",3,3),
	 array("csotr","num:0,40000","分类排序必须为数字",3,3),
	
	);
	/*
	 * 添加
	 * */
	public function store(){
		//自动验证
		if(!$this->create()) return false;
		//执行添加
		return $this->add();
		
	}
	/*
	 * 获得除了自己以及自己的所有自己子集
	 * 
	 * */
	 
	public function getCatedata($cid){
		//1.获得自己所有的子集
		//数组数据找到那一条数据的子集
		$cids = $this->getSon($this->get(),$cid);
	   //2.将自己压在数组中
		$cids[] = $cid;
	   //3.获得除了自己以及自己所有子集的数据
		//将数组转成字符串
		$cids= implode(',', $cids);
		//where("cid not in ($cids)"),获得不在cids里面的数据
		$data = $this->where("cid not in ($cids)")->get();
		//变成树状结构
		return Data::tree($data,"cname");
	}
	public function getSon($data,$cid){
		//静态变量为了防止结果不被覆盖
		 static $temp = array();
       foreach ($data as $k => $v) {
       	//条件成立的时候，当前这一条就是$cid这一条的子集
	      if($cid==$v['pid']){
			$temp[] = $v['cid'];
			  //递归调用继续寻找子集
		    $this->getSon($data,$v['cid']);
		}}
        
     return $temp;  
		    
   }
	
	/*
	 * 编辑
	 * */
	public function edit(){
		//自动验证
		if(!$this->create()) return false;
		//执行编辑
		//编辑的条件，在模板的form中加隐藏域，name为主键字段 value为要修改的数据的id
		return $this->save();
		//$this->where('cid',$cid)->update($_POST);
		
		
	} 
	 
	/*
	 * shanchu 
	 * 
	 * */
	public function delCate($cid){
		//获得要删除数据的Pid让他的儿子的PID变成自己的pid
		$pid= $this->where('cid',$cid)->pluck('pid');
		//执行修改
		$this->where('pid',$cid)->update(array('pid'=>$pid));
		//执行删除
		$this->where('cid',$cid)->delete();
	}
	
}
